import axios from 'axios';
import qs from 'qs';
import { Toast } from 'antd-mobile';
import localStorage from './storage';
import _ from './index';

const ERROR_CODE = {
  '-100': '小新生病了正在抢修',
  '-200': '小新正在努力解决',
  '-401': '登录查看更多精彩内容',
  '-500': '小新正在升级请稍后',
  '-503': '系统升级中',
  'Network Error': '网络连接失败',
};

const instance = axios.create({
  baseURL: 'http://info.zazn.com/',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  transformRequest: [function (data) {
    // 统一处理上传的数据
    return qs.stringify(data);
  }],
  // 超时为5s 上线后是3s
  timeout: 5000,
});
// 请求拦截处理
instance.interceptors.request.use(async (config) => {
  Toast.hide();
  const { method } = config;
  if (method !== 'get') {
    // token 和 clientID 注入
    const res = await localStorage('abra').get();
    if (res) {
      if (!config.data) {
        config.data = {};
      }
      config.data.clientId = res.clientId;
      config.data.token = res.token;
    }
  }

  Toast.loading('小新正在处理~', 0);
  return config;
}, (error) => Promise.reject(error));
// 错误处理拦截器
instance.interceptors.response.use((response) => {
  Toast.hide();
  let resData = {
    code: 500,
    msg: '系统错误',
  };
  if (_.has(response, 'data')) {
    const { data } = response;
    if (data.code === -401) {
      localStorage('abra').remove();
    }
    if (ERROR_CODE[data.code]) {
      let message = ERROR_CODE[data.code] || '小新生病了正在抢修中~';
      if (data.err && _.has(data.err, 'msg')) {
        message = data.err.msg;
      }
      resData = { code: data.code, msg: message };
      Toast.fail(message, 2);
    } else {
      resData = data;
    }
  }
  return resData;
}, (error) => {
  Toast.offline(ERROR_CODE[error.message] || '小新生病了正在抢修中~', 2);
  return Promise.reject(error);
});
export default instance;
